TypeScript 98.3%
CSS 0.9%
Shell 0.7%
1// Layout serveur des pages de cours : validation du cours, vérification de2// l'inscription, sous-navigation horizontale.3import { notFound, redirect } from "next/navigation";4import { currentUser } from "@/lib/auth/session.ts";5import { get } from "@/lib/db/index.ts";6import { CourseNav } from "@/components/learning/course-nav";78export default async function CourseLayout({9 children,10 params,11}: {12 children: React.ReactNode;13 params: Promise<{ course: string }>;14}) {15 const { course } = await params;16 const slug = course.toLowerCase();17 if (slug !== "imm1003" && slug !== "imm1033") notFound();18 const code = slug.toUpperCase();1920 const user = await currentUser();21 if (!user) redirect("/connexion");2223 const enrolled = get("SELECT 1 as ok FROM enrollments WHERE user_id = ? AND course_code = ?", user.id, code);24 if (!enrolled) redirect("/apprendre");2526 const row = get<{ title: string; color: string }>("SELECT title, color FROM courses WHERE code = ?", code);2728 return (29 <div className="flex-1 flex flex-col min-h-0">30 <CourseNav course={slug} title={row?.title ?? code} color={row?.color ?? "#1d64b0"} />31 <div className="flex-1">{children}</div>32 </div>33 );34}35